package com.company.class9;

import java.util.Arrays;

/**
 * @Classname BubbleSort
 * @Description 类型说明
 * @Date 2022/4/26 20:53
 * @Created by zbw
 */

public class BubbleSort {

    public static int[] b = {1,3,2,6,5,4,7,9,8};
    public static int[] a = {3,1,2,6,5,4,7,9,8};

    public static void main(String[] args) {

        BubbleSort bs = new BubbleSort();

        System.out.println("-------------------冒泡排序：-----------------");
        //外层循环，循环一共b.length-1趟
        for(int i = 0;i<b.length;i++){
            int t = 0;
            //内层循环，每一轮从0开始直到下标n-i-1的数，两两比较
            for (int j = 0;j<b.length-i-1;j++){
                //两两比较，如果前一个数大于后一个数，就交换
                if (b[j]>b[j+1]){
                    //交换数据
                    bs.Swap(b,j,j+1);
                    t = 1;
                }

            }
            if(t==0){
                break;
            }

            System.out.println("第"+i+"趟："+ Arrays.toString(b));
        }
        System.out.println("最终结果:"+Arrays.toString(b));


        System.out.println("-------------------简单选择排序：-----------------");
        //定义存放最小值下标
        int min;
        //需要循环a.length-1轮
        for(int i=0;i<a.length-1;i++){
            //初始认为i为最小值的下标
            min = i;
            //循环i后面的数
            for(int j = i+1;j<a.length;j++){
                //两两比较大小，下标j的值比min下，则将j赋值给min
                if(a[j]<a[min]){
                    min = j;
                }

            }
            //如果min不等于i，说明发生互换
            if(min != i){
                //交换
                bs.Swap(a,min,i);
            }
            System.out.println("第"+i+"趟："+ Arrays.toString(a));

        }
        System.out.println("最终结果："+Arrays.toString(a));

        System.out.println("阶乘10！："+bs.Factorial(10));
        System.out.println("n=10的斐波拉及算法："+bs.Fibonacci(10));
    }

    //阶乘n!
    public int Factorial(int n){
        if(n==1){
            return 1;
        }else{
            //递归
            return Factorial(n-1)*n;
        }
    }
    //斐波拉及算法
    public int Fibonacci(int n){
        //F1和F2为1
        if(n<=2){
            return 1;
        }else{
            //递归
            //F(n-2)+F(n-1)
            return Fibonacci(n-1) + Fibonacci(n-2);
        }
    }

    //交换
    public void Swap(int[] arr,int a,int b){
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }

}
